package es.udc.acs.banco.sesion;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.SQLException;

import es.udc.acs.banco.exceptions.SesionInexistenteException;
import es.udc.acs.banco.operations.DBSesionBancoOperations;
import es.udc.acs.banco.util.GestorProperties;
import es.udc.acs.database.exception.ConexionInvalidaException;

public class ControlSesion {
	
	private static volatile Sesion sesion;

	private ControlSesion() {}
	
	private static void cargarSesion() throws FileNotFoundException,
	                                          IOException, 
	                                          SQLException, 
	                                          SesionInexistenteException, 
	                                          ConexionInvalidaException {
		
		if (sesion == null) {
			
			String idBanco = 
					GestorProperties.devolverPropiedad(GestorProperties.IDBANCO);

			try {			
				sesion = DBSesionBancoOperations.
						obtenerSesionBanco(idBanco);			
			} catch (Exception e) {
				sesion = new Sesion();
				DBSesionBancoOperations.
					crearSesionBanco(idBanco,sesion);			
			}		
		}
	}
	
	
	// se hace al iniciar sesion nueva
	public static void nuevaSesion() throws FileNotFoundException, 
											IOException, 
											SQLException, 
											ConexionInvalidaException {
	    
		String idBanco = 
				GestorProperties.devolverPropiedad(GestorProperties.IDBANCO);
		
		sesion = new Sesion();
		DBSesionBancoOperations.guardarSesionBanco(idBanco, sesion);
		
	}
	
	
	// se hace ante una caída del banco
	public static Sesion obtenerSesion() throws FileNotFoundException, 
	                                            IOException, 
	                                            SQLException, 
	                                            SesionInexistenteException, 
	                                            ConexionInvalidaException {
		
		cargarSesion();
		
		return sesion;
	}
}
